package com.robert.BCH;

public class parameters {
    /**
     * 一些公共参数放在此类里
     */
    //仅支持模2的BCH，也就是处理的是特征2域上的BCH，至于模3....等其他模数的BCH编码并不支持
    private int mod = 2;
    //次数m
    private int m;
    //码长n=2^m-1
    private int n;
    //g是生成元Generator,即本原多项式primitive
    /**
     * 可以通过sagemath获得生成多项式，步骤如下：
     * 1.打开sagemath或网页版sagecell(https://sagecell.sagemath.org/)
     * 2.如果是本地sagemath则输入notebook(),显示 Open your web browser to http://localhost:8080 时即可
     *   首次使用sagemath需要设置登陆密码，如果使用sagecell则忽略此步骤
     * 3.计算生成元，输入：
     *     k.<a> = GF(32, modulus="primitive")
     *     k.modulus()
     *   然后执行，即可得到本原多项式
     * 4.对于本原多项式按照polynomial类得到具体的多项式，如GF(32)域上，其中32=2^m，即参数m=5时，得到结果x^5 + x^2 + 1，
     *   则new polynomial("100101")即可，具体见单元测试文件parametersTest
     */
    private polynomial g;


    public parameters(int m) throws Exception {
        this.g = new primitivePoly().getPrimitivePoly(m);
        this.m = m;
        this.n = (int)Math.pow(2,m)-1;
    }

    public parameters(polynomial g, int m){
        this.g = g;
        this.m = m;
        this.n = (int)Math.pow(2,m)-1;
    }


    public int getMod() {
        return mod;
    }

    public polynomial getG() {
        return g;
    }

    public int getN() {
        return n;
    }
}
